package dao

import (
	"time"
)

// 这是 Advertise 的全局公开dao对象，被service层调用!
var AdvertiseDao = advertiseDao{}

// 广告表
// 这是 advertise表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Advertise struct {
	Id         int32     `json:"id" form:"id" v:"id" db:"id"`
	Name       string    `json:"name" form:"name" v:"name" db:"name"`                             // 广告标题
	Link       string    `json:"link" form:"link" v:"link" db:"link"`                             // 所广告的商品页面或者活动页面链接地址
	Url        string    `json:"url" form:"url" v:"url" db:"url"`                                 // 广告宣传图片
	Position   int8      `json:"position" form:"position" v:"position" db:"position"`             // 广告位置：1则是首页
	Content    string    `json:"content" form:"content" v:"content" db:"content"`                 // 活动内容
	StartTime  time.Time `json:"start_time" form:"start_time" v:"start_time" db:"start_time"`     // 广告开始时间
	EndTime    time.Time `json:"end_time" form:"end_time" v:"end_time" db:"end_time"`             // 广告结束时间
	Enabled    int8      `json:"enabled" form:"enabled" v:"enabled" db:"enabled"`                 // 是否启动
	AddTime    time.Time `json:"add_time" form:"add_time" v:"add_time" db:"add_time"`             // 创建时间
	UpdateTime time.Time `json:"update_time" form:"update_time" v:"update_time" db:"update_time"` // 更新时间
	Deleted    int8      `json:"deleted" form:"deleted" v:"deleted" db:"deleted" gm:"deleted"`    // 逻辑删除
}

// 注意:这是 Advertise 的私有dao对象，只能在dao层内使用!
type advertiseDao struct {
	InsertTemplate func(arg Advertise) (int64, error)           //插入一条记录
	UpdateTemplate func(arg Advertise) (int64, error)           //更新一条记录
	DeleteTemplate func(id int64) (int64, error)                `args:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Advertise, error)            `args:"id"` //根据传入的主键获取一条记录
	List           func(arg AdvertiseList) ([]Advertise, error) //模糊分页查询
}

/*
// 这是 advertise 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type AdvertisePostman struct {
id
name
link
url
position
content
start_time
end_time
enabled
add_time
update_time
deleted

}*/

// 这是 advertise 表的批量请求参数
type AdvertiseReq struct {
	List []Advertise `json:"list" form:"list"`
}

// 这是 advertiseDao.List()方法的请求参数
type AdvertiseList struct {
	Name    string `json:"name" form:"name"`
	Content string `json:"content" form:"content"`
	Page
}
